Hoşgeldiniz: OyunYapimi.org
 
Ara
Konular
  Üye Olun!    
Ana Menü
 Ana Sayfa
 Anketler
 Dosyalar
 Dökümanlar
 Forum
 Haber Arşivi
 WWW Linkleri
 Üye Listesi

Forumlar
Forumlarda Arama
 
[ Ara ]
Son yazilanlar

free ebooks - 2004-05-16 14:47 free ebooks...
oyun yazmak için - 2004-05-15 11:13 oyun yazmak için...
Sinus dalgası - 2004-05-14 19:21 Sinus dalgası...
Demosu yakında... - 2004-05-06 15:11 Demosu yakında......
Depth Test - 2004-05-03 20:55 Depth Test...
forum mesajlarini duzenlemek - 2004-05-03 19:34 forum mesajlarini ...
Başka Programlara Erişmek - 2004-05-03 17:44 Başka Programlara ...
Güzel bir e-book bağlantısı.. - 2004-05-03 16:06 Güzel bir e-book b...
Okyanus Dalgasi - 2004-05-03 16:00 Okyanus Dalgasi...
3d Shoot em up - 2004-05-03 15:57 3d Shoot em up...
Esnek Güç - 2004-05-03 13:32 Esnek Güç...
UltimateGameProgramming.com - 2004-05-03 12:29 UltimateGameProgra...
Function Pointer Nedir ne ise yarar - 2004-05-03 01:35 Function Pointer N...


Konu Disi


LAMER - 2004-05-10 01:58 LAMER...
anasafa yok forum var - 2004-05-08 16:01 anasafa yok forum ...
Anasayfa Kapali  Fakat.. - 2004-05-06 15:05 Anasayfa Kapali F...
Texture Arşivi - 2004-05-03 01:39 Texture Arşivi...
Yeni Kitap: Elektronik Hobi - 2004-05-03 00:29 Yeni Kitap: Elektr...
3DTURK - 2004-05-02 23:27 3DTURK...
Online Oyun - 2004-05-02 19:27 Online Oyun...


Splatt Forum


Konuyu açan kişi: deniz

OyunYapimi.org : Index » » OyunYapımı » » Depth Test
  
Yazar Depth Test
Darklight



Üyelik tarihi
31-10-2002

Mesajlar : 120

OFF-Line

 Yollanan 03-05-2004 at 09:59   
Selam simdi soyle bir gariplik var

eger asagidaki kodda glEnable(GL_DEPTH_TEST) acmassak yüzeylerin renderlenme sirasi Z koordinatina gore yapmadan yapacagi için on yüzeyi gormeniz gereken yerde
arka yüzeyi gorme gibi sorunlarla karsilasirsiniz

/*-------------------------------------------------------------------------------------------
FONKSIYON ISMI:renderTextureBufferedObj
YAPTIGI IS:Ekran Buffered Objelerini Renderler
------------------------------------------------------------------------------------------*/
void renderTextureBufferedObj(entityObj *e){
int ivertexDimension=3;
int itexDimension=2;
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, e->texID);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(itexDimension,GL_FLOAT,0,e->pbuffered.t);
glVertexPointer(ivertexDimension,GL_FLOAT,0,e->pbuffered.v);
glDrawArrays(GL_QUADS,0,e->pbuffered.size);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,0);
glDisable(GL_DEPTH_TEST);
}


ama blending yapiyorsaniz Z bufferi kullanmaniz anlamsız cunku arka yüzeyleri feda edemessiniz ondekilerle belli oranda karismasini istediginiz için onlarinda en geriden öne dogru renderlenmesi gerekir
Z'ye gore en arkadakini Renderle ve fragmente bunun için diyelim ki
Z -100 Pixel R=0, G=200 Blue=100
Z - 70 Pixel R=100, G=0, Blue=0 %60 = Gecirgen
Z - 50 Pixel R=100, G=20, Blue=0 %40 = Gecirgen

bunlari en arkadakinden one dogru tek etk hesaplamasi gerekiyor, OpenGL burda bu sekilde bir yollamı renderliyor.

Asagidaki fonksiyonda baktigimizda
glEnable(GL_DEPTH_TEST) yaptigimizdada sistem
glDisable(GL_DEPTH_TEST) yaptigimizdada farkli bir sonuc vermemekte

yani GL_BLEND aktif oldugunda GL_DEPTH_TEST pek bir ise yaramiyor
otamatik olarak OpenGL tarafından kullanılmıyormu ?

/*-------------------------------------------------------------------------------------------
FONKSIYON ISMI:renderTextureBlendBufferedObj
YAPTIGI IS:Ekran Buffered Objelerini Renderler
------------------------------------------------------------------------------------------*/
void renderTextureBlendBufferedObj(entityObj *e){
int ivertexDimension=3;
int itexDimension=2;

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glDisable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
glBindTexture(GL_TEXTURE_2D, e->texID);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(itexDimension,GL_FLOAT,0,e->pbuffered.t);
glVertexPointer(ivertexDimension,GL_FLOAT,0,e->pbuffered.v);
glDrawArrays(GL_QUADS,0,e->pbuffered.size);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,0);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);

}


 Profil  E-posta  www   Yolla   Düzenle  Gönder
MD-C



Üyelik tarihi
26-02-2003

Mesajlar : 582

OFF-Line

 Yollanan 03-05-2004 at 11:16   
Darklight, doğruyu söylemek gerekirse tam okumadım yazını, fakat demek istediğini sanırım anladım (heralde ) GL_DEPTH_TEST olayı ortamda ışık olduğunda hisedilebiliyor ama dediğin gibi Işıksız bir ortamda GL_DEPTH_TEST vamış yada yokmuş pek bir fark yok...

 Profil  www    Düzenle  Gönder
Darklight



Üyelik tarihi
31-10-2002

Mesajlar : 120

OFF-Line

 Yollanan 03-05-2004 at 11:55   
Ortamda isik yok demek istedigim
Blending acik oldugunda Depth testiniz acik olsada OpenGL bir sekilde Depth testi es geciyor. Bunu yukarda yaptıgım teslerden anladım. Ama soyle olmasini beklerdim

Depth Test aciksa sistemin blending islemini yapamaması
cunku Pipelinede ilk once Depth Test islemi sonrada Blending islemi yapilmakta diye biliyorum. Bu konuda fikri olan var mı ?



 Profil  E-posta  www   Yolla   Düzenle  Gönder
cemuzunlar



Üyelik tarihi
03-08-2003

Mesajlar : 15

OFF-Line

 Yollanan 03-05-2004 at 12:00   
OpenGL bu konuda herhangi bir yardim da bulunmaz. Burada genel yontem soyledir:

- Once opaque( gecirgen olmayan, alphasiz, blending gerektirmeyen ) yuzeyler z-test ve z-write acik olarak cizilir.
- Sonra transparan( gecirgen, alphali, blending gerektiren ) yuzeyler arkadan one dogru siralanir. Blending acilir. Sirali liste z-test ve z-write kapali olarak cizilir. Cizim sirasinda, her yuzey icin blending fonksiyonu, ilgili yuzeyin ciziminden once ayarlanir.

z-test'i acip kapamak icin: glEnable/glDisable( GL_DEPTH_TEST )
z-write'i acip kapamak icin: glDepthMaske( true/ false )
blending'i acip kapamak icin: glEnable/glDisable( GL_BLEND )
blending fonksiyonunu ayarlamak icin: glBlendFunc( ... )

 Profil  www   Yolla   Düzenle  Gönder
Black_Knight



Üyelik tarihi
23-10-2002

Mesajlar : 131

OFF-Line

 Yollanan 03-05-2004 at 20:55   
bi yerlerde okumustum eger iki tane seffaf polygon kesişiyorsa bunu halletmek için adamlar polygonları boluyorlardı nasıl yaparsın bilmem tabi :]




-----------------
Shadowy Tree | World of Entaria
Omnium rerum principia parva sunt.
Oyun Yapimi Irc Kanalı -irc.EnterTheGame.com #oyunyapimi

 Profil  E-posta  www   Yolla    Düzenle  Gönder
  
Atla

Splatt Forum By: Splatt.it
Versione: 3.1






Web site Engine's code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.